package com.demo.java.OD201_250.OD221;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【矩阵最值 or 计算二维矩阵的最大值】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145915360
 */
public class OdMain {
    public static void main(String[] args) {
        try (Scanner s = new Scanner(System.in)) {
            int n = Integer.parseInt(s.nextLine()); // 读取行数
            String[] lines = new String[n]; // 存储每一行
            for (int i = 0; i < n; ++i) {
                lines[i] = s.nextLine(); // 读取每一行
            }
            solveMethod(n, lines); // 处理并输出结果
        }
    }

    private static void solveMethod(int n, String[] lines) {
        int res = 0; // 最终的结果
        int[][] nums = new int[n][]; // 存储每一行的整数数组
        for (int i = 0; i < n; ++i) {
            nums[i] = Arrays.stream(lines[i].split(","))
                    .mapToInt(Integer::parseInt) // 将每个元素转换为整数
                    .toArray();
        }
        for (int i = 0; i < n; ++i) {
            int max = Integer.MIN_VALUE; // 每行的最大二进制数
            for (int j = 0; j < nums[i].length; ++j) {
                int[] shifted = new int[nums[i].length];
                System.arraycopy(nums[i], j, shifted, 0, nums[i].length - j); // 循环移位
                System.arraycopy(nums[i], 0, shifted, nums[i].length - j, j); // 继续移位
                String binInt = Arrays.toString(shifted)
                        .replaceAll("\\W+", ""); // 转换为二进制字符串
                int sum = Integer.parseInt(binInt, 2); // 转换为十进制数
                if (sum > max) {
                    max = sum; // 更新最大值
                }
            }
            res += max; // 累加每行的最大值
        }
        System.out.print(res); // 输出总和
    }
}